// miniprogram/pages/concepts/concepts.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    formData: {
      concept_name: '', // 概念名称
      concept_description: '', // 概念描述
      click_count: 0, // 打卡次数
      queue_number: 0, // 排序号
      is_top: false, // 是否置顶
      is_delete: false // 是否删除
    },
    formRules: {
      'concept_name':  {
        required: true,
        message: '概念名称不能为空',
        focus: false
      },
      'concept_description':  {
        required: true,
        message: '概念描述不能为空',
        focus: false
      }
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.setData({
      ['formData.concept_name']: '',
      ['formData.concept_description']: ''
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * 新增概念
   */
  formSubmit(e) {
    let formData = {}
    this.editorCtx.getContents({
      success: function (res) {
        console.log(res)
        formData.concept_description = res.html
      }
    }) 
    if(this.initValidate(e.detail.value)){
      if(e.detail.value.concept_name.length > 20) {
        wx.showToast({
          icon: 'none',
          title: '概念不能超过20个字哦！'
        })
        return
      }
      
      formData.concept_name = e.detail.value.concept_name

      const db = wx.cloud.database()

      // 判断概念是否已经存在
      db.collection('concept_info').where({
        concept_name: formData.concept_name
      })
      .get()
      .then(res => {
        if(res.data.length > 0) {
          wx.showToast({
            icon: 'none',
            title: '这个概念已存在！'
          }) 
        } else {
          this.addConcept(db, formData)
        }
      })
      .catch(
          err => {
            wx.showToast({
              icon: 'none',
              title: '查询记录失败'
            })
            console.error('[数据库] [查询记录] 失败：', err)
          }
      )
    }
  },
  /**
   * 新增概念
   */
  addConcept: function(db, formData) {
    // 新增概念
    db.collection('concept_info').add({
      data: {
        concept_name: formData.concept_name,
        concept_description: formData.concept_description,
        click_count: 0,
        queue_number: 0,
        is_top: false,
        is_delete: false
      },
      success: res => {
        console.log(res)
        wx.showToast({
          title: '新增概念成功',
        })
        // 跳转我的概念页面
        wx.switchTab({
          url: '../myConcept/myConcept'
        })
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '新增概念失败'
        })
        console.error('[数据库] [新增记录] 失败：', err)
      }
    })
  },
  /**
   * 表单验证
   * @param {*} object 
   */
  initValidate: function(object){
    let data = this.data.formRules
    for (const key in data) {
      if (object.hasOwnProperty(key)) {
        const element = object[key];
        if(data[key].required){
          if(element.length === 0){
            wx.showModal({
              title: '',
              content: data[key].message,
              showCancel: false
            })
            data[key].focus = true
            return false
          } 
          data[key].focus = false
        }
      }
    }
    this.setData({
      formRules: data
    })
    return true
  },

  onEditorReady() {
    const that = this
    wx.createSelectorQuery().select('#editor').context(function (res) {
      that.editorCtx = res.context
    }).exec()
  }
})